<?php
namespace Home\Biz;
use Home\Biz\CommonBiz;
/**
 * @Title: 会议记录
 * Description: 
 * @version 2016年9月26日 下午4:15:04 
 * @author lin.yujiao@whaley.cn
 */
class MeetingBiz {
	/**
	 * Description: 当天是否存在会议
	 * @version 2016年9月26日 下午4:15:14 
	 * @author lin.yujiao@whaley.cn
	 * @param $meeting_name
	 * @param $start_time
	 * @param $end_time
	 * @param $pageSize
	 * @param $index
	 */
    public static function existMeeting() {
    	$condition_array['start_time'] = array('between', array(date("Y-m-d",time()),date("Y-m-d 23:59:59",time())));
    	$condition_array['delete_flag'] = array('neq', 1);
    	//M方法实例化会议模型
    	$meeting = M('meeting','','DB_system');
    	//查询
    	$list_meeting_infos = $meeting->where($condition_array)->select();
    	if(count($list_meeting_infos) > 0){
    		return $list_meeting_infos[0];
    	}else{
    		return null;
    	}
    }
    /**
     * Description: 根据id获取会议信息
     * @version 2016年9月28日 下午6:24:39 
     * @author lin.yujiao@whaley.cn
     * @param unknown $meeting_id
     */
    public static function loadMeeting($meeting_id) {
    	$condition_array['meeting_id'] = array('eq', $meeting_id);
    	//M方法实例化会议模型
    	$meeting = M('meeting','','DB_system');
    	//查询
    	$list_meeting_infos = $meeting->where($condition_array)->select();
    	if(count($list_meeting_infos) > 0){
    		return $list_meeting_infos[0];
    	}else{
    		return null;
    	}
    }
    /**
     * Description: 当前用户是否在会议参加者名单中
     * @version 2016年9月28日 下午5:56:38 
     * @author lin.yujiao@whaley.cn
     * @param unknown $meeting_id
     * @param unknown $employee_code
     */
    public static function existMemeber($meeting_id ,$employee_code) {
    	$condition_array = array();
    	$condition_array['meeting_id'] = array('eq', $meeting_id);
    	$condition_array['employee_code'] = array('eq', $employee_code);
    	$exist_member =  M('meeting_member','','DB_system')->where($condition_array)->select();
    	return $exist_member;
    }
   	/**
   	 * Description: 基础校验
   	 * @version 2016年9月28日 下午4:22:17 
   	 * @author lin.yujiao@whaley.cn
   	 * @param unknown $meeting
   	 */
    public static function baseValidate($meeting, $user, $meeting_key) {
    	if(empty($meeting)){
    		return '今天没有会议需要签到';
    	}else{
    		if($meeting_key != date("Y-m-d",strtotime($meeting['start_time']))){
    			return '二维码不正确';
    		}
	    	$s_range_time = strtotime($meeting['sign_in_from']);
	    	$e_range_time = strtotime($meeting['sign_in_to']);
	    	if(time() < $s_range_time){
	    		return '会议:' . $meeting['meeting_name'] . ',还未开始';
	    	}
	    	if(time() > strtotime($meeting['end_time'])){
	    		return '会议:' . $meeting['meeting_name'] . ',已结束';
	    	}
	    	$member_lst = self::existMemeber($meeting['meeting_id'], $user['userid']);
	    	if(!empty($member_lst) && count($member_lst) > 0){
	    		$member = $member_lst[0];
	    		//若该用户已签到并且当前时间在开始时间的签到有效范围内
	    		if(!empty($member['sign_in_time']) && time() >= $s_range_time && time() <= $e_range_time){
	    			return '当前用户已经签到过,请勿重复签到';
	    		}
	    	}
	    	/*
	    	$member = null;
	    	 if(empty($member_lst) || count($member_lst) <= 0){//当前用户是否在会议参加者名单中
	    		$member = self::addMeetingMember($user, $meeting);
	    		if($member == -1){
	    			return '临时参加者数据新增失败,请联系管理员';
	    		}
	    	}else{
	    		$member = $member_lst[0];
		    	//若该用户已签到并且当前时间在开始时间的签到有效范围内
		    	if(!empty($member['sign_in_time']) && time() >= $s_range_time && time() <= $e_range_time){
		    		return '当前用户已经签到过,请勿重复签到';
		    	}
	    	} */
	    	return $msg;
    	}
    }
    /**
     * Description: 会议校验
     * @version 2016年9月28日 下午7:25:54 
     * @author lin.yujiao@whaley.cn
     */
    public static function meetingValidate($meeting,$latitude, $longitude){
    	$distance = CommonBiz::getDistance($latitude, $longitude, $meeting['latitude'], $meeting['longitude']);
    	if($distance > C('MeetingConfig.location_range')){
    		return '您不在会议指定地点附近,无法进行签到';
    		//return "测试会议签到距离为:". $distance . "<br/>[本地坐标:" . $latitude . "," .$longitude . "]" .'<br/>[1000米外不允许签到]';
    	}
    }
    /**
     * Description: 查询记录数
     * @version 2016年9月28日 下午1:42:03
     * @author lin.yujiao@whaley.cn
     * @param unknown $meeting_id
     */
    private function queryMemberCount($meeting_id){
    	$condition_array = array();
    	$condition_array['meeting_id'] = array('eq', $meeting_id);
    	// 总记录数
    	return M('meeting_member','','DB_system')-> where($condition_array)->count();
    }
    /**
     * Description: 会议签到签出
     * @version 2016年9月28日 下午7:36:59 
     * @author lin.yujiao@whaley.cn
     */
    public static function doMeetingRecord($meeting, $employee_code,$employee_name, $latitude, $longitude){
    	//校验距离等
    	$msg = self::meetingValidate($meeting, $latitude, $longitude);
    	//校验成功msg为空 否则直接返回错误信息
    	if(empty($msg)){
    		$start_time = $meeting['start_time'];
    		$end_time = $meeting['end_time'];
    		$member_lst = self::existMemeber($meeting['meeting_id'], $employee_code);
    		$member = null;
	    	if(empty($member_lst) || count($member_lst) <= 0){//当前用户是否在会议参加者名单中
	    		$member = self::addMeetingMember($employee_name, $employee_code, $meeting);
	    	}else{
	    		$member = $member_lst[0];
	    	}
	    	if(!empty($member)){
	    		$member['update_date'] = date("y-m-d H:i:s", time());
	    		$member['update_user'] = 'whaley.fz.meetingBiz.doMeetingRecord';
	    		if(empty($member['sign_in_time'])){
	    			//执行签到功能
	    			$member['sign_in_time'] = date("y-m-d H:i:s", time());
	    			$s_range_time = strtotime($meeting['sign_in_from']);
	    			$e_range_time = strtotime($meeting['sign_in_to']);
	    			//例子:范围为前后半小时,开始时间前半小时 <= 当前时间 <= 开始时间后半小时  正常签到
	    			if(time() >= $s_range_time && time() <= $e_range_time){
	    				$member['sign_in_sts'] = 'NORMAL';
	    			}else{
	    				$member['sign_in_sts'] = 'LATE';
	    			}
	    			$msg = '签到成功';
	    		}else{
	    			//执行签出功能
	    			$member['sign_off_time'] = date("y-m-d H:i:s", time());
	    			$member['sign_off_sts'] = 'NORMAL';
	    			$msg = '签退成功';
	    		}
	    		$success_count = M('meeting_member','','DB_system')->where("member_id='%s'", $member['member_id'])->save($member);
	    		/* echo M('','','DB_system')->getLastSql();
	    		 echo '|||||||||||||||||||||||||||';
	    		 echo M('','','DB_system')->getDbError();
	    		 echo '|||||||||||||||||||||||||||';
	    		 echo $success_count; */
	    		//返回条数为1 表示更新成功 直接返回提示
	    		if($success_count == 1){
	    			return array('isSuccess'=>true,'msg'=>$msg);
	    		}
	    		//否则数据库操作失败 签到不成功
	    		$msg = '签到失败';
	    	}else{
	    		$msg = '临时参加者数据新增失败,请联系管理员';
	    	}
    	}
    	return array('isSuccess'=>false,'msg'=>$msg);
    }
    /**
     * Description: 新增会议参加人
     * @version 2016年9月28日 上午10:22:21
     * @author lin.yujiao@whaley.cn
     * @param unknown $add_members
     */
    private function addMeetingMember($name, $user_id, $meeting){
    	$entity = array(
    		'member_id' => self::generateMeetingMemberId(),
    		'meeting_id' => $meeting ['meeting_id'],
    		'employee_name' => $name,
    		'employee_code' => $user_id,
    		'create_user' => 'whaley.fz.meetingBiz.doMeetingRecord',
    		'create_date' => date("y-m-d H:i:s", time()),
    		'sign_in_sts' => 'NONE',
    		'sign_off_sts' => 'NONE',
    		'from_type' => 'TEMP'//表示来源为临时添加
    	);
    	$count = M('meeting_member','','DB_system')->add($entity);
    	//添加临时参会人成功后调整参会人数
    	if($count == 1){
	    	$meeting ['member_count'] = self::queryMemberCount($meeting ['meeting_id']);
	    	M('meeting','','DB_system')->where('meeting_id="%s"', array($meeting['meeting_id']))->save($meeting);
    		return $entity;
    	}
    	return null;
    }
    /**
     * Description:
     * @version 生成会议成员唯一编码
     * @author lin.yujiao@whaley.cn
     * @return string
     */
    public static function generateMeetingMemberId()
    {
    	$seq = CommonBiz::getNewSeq('member_id') + 10000000;
    	return 'MTR' . $seq;
    }
} 